<?php
	//引入smarty核心文件
	include_once(ORG_PATH.'/Smarty/Smarty.class.php');
	/**
	 * 这是一个控制器的父类一个抽象类  无法被实例化
	 */	
	 class SmartyView{
	 	
//		保存smarty对象
		private $smarty = null;
		
		public function __construct(){
			
			//先判断smarty这个是否为null如果不为空那直接返回return
			if(is_null($this->smarty)){
				/**
				 *  配置smarty主入口
				 */
				 $smarty = new Smarty();
				 //定义模板目录  就是当前应用的VIEW目录
				 $smarty->template_dir = APP_VIEW_PATH;
				 //定义smarty编译目录  、这个编译目录 是定义在当前应用的目录下
				 $smarty->compile_dir = APP_COMPILE_DIR;
				 //定义缓存目录
				 $smarty->cache_dir = APP_CACHE_DIR;
				 
				 if(!C('IS_CACHE')){
				 	//是否开户缓存
				 	$smarty->caching = C('IS_CACHE');
					 //缓存时间
				 	$smarty->cache_lifetime = C('CACHE_TIME');
				 }
				 
				 //模板左定界符
				 $smarty->left_delimiter = C('LEFT_DELIMITER');
				 //模板右定界符
				 $smarty->right_delimiter = C('RIGHT_DELIMITER');
				 
				 //注册局部不缓存方法  第一个参数为标签名，第二个为方法名
				 $smarty->registerPlugin("block","nocache", "nocache", false);
				 //再将配置好的smarty对象赋值给成员静态变量
				 $this->smarty = $smarty;
			}
		}
		
		/**
		 * 给模板分配变量
		 */
		protected function assign($var,$val){
			$this->smarty->assign($var,$val);
		}
		
		/**
		 * 给相应的方法分配模板
		 * 如果没有指定相应的模板那么默认就走
		 * 相应控制器VIEW中的模板
		 * @param string $tpl
		 */
		 protected function display($tpl=null){
		 	//默认模板位置
			$tplPath = is_null($tpl)?APP_VIEW_PATH.'/'.CONTROLLER.'/'.ACTION.'.html':$tpl;
//			
			//判断模板文件是否存在如果不存在那么招聘异常
			if(!is_file($tplPath)){
				throw new IncludeException($tplPath, '模板文件不存在请检查路径', 4);
			}
			$this->smarty->display($tplPath);
		 }
		
		/**
		 * 判断模板是否失效
		 */
		 protected function is_cached(){
		 	$path = APP_VIEW_PATH.'/'.CONTROLLER.'/'.ACTION.'.html';
			if(is_file($path)){
				return $this->smarty->is_cached($path);
			}else{
				throw new IncludeException($path,'模板文件不存在',4);
			}
		 }
		
		
	 }
	